home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / english / deckybin / deckey.lis next >
File List  |  1995-11-25  |  16KB  |  307 lines

  1. DECKeybd.doc                                               June, 1989
  2.   
  3. Introduction:
  4.  
  5. I'm typing this on a DEC LK201 keyboard connected to an Atari 1040ST
  6. through the midi port.  Now I won't have to get a Mega to have a
  7. decent, detachable, keyboard!  Besides, this keyboard has a better
  8. layout and ( IMHO ) feel than the one that comes with a Mega.  
  9.  
  10. One of reason that I started using ST's was that its keyboard layout is
  11. almost identical to a DEC keyboard.  Since my microcomputers spend a lot
  12. of time acting as terminals talking to VAX computer systems, the
  13. compatible keyboard layout is very important to me.  On the other hand,
  14. I have always hated the feel of  the ST keyboard.  I think it is the
  15. ST's worst feature.  Now I have been able to keep the layout and get
  16. much better feel in a detached keyboard.
  17.  
  18. LK201s keyboards are used on all current DEC products, including
  19. terminals and workstations. Moreover, they were used on the DEC Rainbow
  20. PC's and on the previous generation of DEC terminals.  As a result,
  21. they are fairly common at ham and computer fests. You could also get a
  22. new one from DEC as a replacement part, albeit for too much money!
  23.  
  24. The obvious choice for an external ST keyboard would be an extended PC
  25. keyboard.  Its layout is fairly close to the ST's, and it is relative
  26. cheap and very available.  Unfortuately, its electrical interface is
  27. quite incompatible with any of the Atari's ports. PC keyboard use with
  28. the ST would require a complicated external interface adapter.  I don't
  29. know if anyone has done it, but I decided it wasn't worth the trouble.
  30. On the other hand, the LK201 keyboard can be wired directly to either
  31. the serial or midi ports. 
  32.  
  33. LK201s conform to RS-423 standards at 4800 baud, 8 bits, no parity, one
  34. stop bit.  They send a single byte of code ( a scan code ) for most key
  35. presses, only the shift and control keys send codes on both down and
  36. up. When a key or keys is help down, a metronome ( repeat ) code is
  37. sent at a fixed rate.
  38.  
  39. The ST keyboards use a serial interface at 7.8125 K baud. They send a
  40. scan code when a key is depressed or released. The software require to
  41. convert input from the DEC keyboard to that used by the ST is straight
  42. forward.
  43.  
  44. If you are willing to use your serial port, no modifications to the ST
  45. or keyboard are required.  All it takes is a small, external, power
  46. supply and a RJ11 ( modular phone plug ) to DB25 adapter.  The
  47. limitation when using the serial port is that you can't use the ST as a
  48. terminal with the external keyboard.  The midi port interface doesn't
  49. have this limitation but it does require internal modifications to the
  50. ST.
  51.  
  52. The power supply requirement is 200ma. at 12 V.  The voltage is
  53. regulated internally so it isn't very critical.  A range from 10 V. to
  54. 15 V. seems OK, although you might have internal heat problems in the
  55. keyboard at the upper end of that range. Suitable wall transformer type
  56. supplies are available for less than $10.  Since I'm not going to buy a
  57. Mega ST, my ST's power supply will have to handle 4 megabytes of memory
  58. in the near future. I didn't want to further load the ST's already
  59. marginal power supply with the extra keyboard.  
  60.  
  61. The midi port problem is that its baud rate is is hardwired into the
  62. computer.  Changing the midi port's baud rate to 4800 baud is
  63. straightforward, but it should only be done by someone with good
  64. soldering skills and PC ( that's Printed Circuit, not Personal
  65. Computer!  ) experience.
  66.  
  67. The modification uses one TTL IC, half a dozen short pieces of wire,
  68. two solder connections to pins on existing IC's and one trace cut on
  69. the top of the ST circuit board.  It isn't even necessary to remove the
  70. metal shield on a 1040 ST, because everything you need to get at is
  71. located under the disk drive.  Since this change will affect the
  72. operation of the midi port, you may wish to mount a switch ( SPDT )
  73. that selects either 4800 or the normal ( 31.25K )baud rate.
  74.  
  75. No external keyboard, unless it is simply an ST keyboard mounted in a
  76. separate case, can replace the built in keyboard.  STs need the
  77. mouse, joystick, and clock functions of the original keyboard.  An
  78. external keyboard must simply work in parallel with the original
  79. keyboard.
  80.  
  81. Software:
  82.  
  83. When you strike a key on the ST's keyboard, a scancode is sent from it
  84. to a serial port on the main board.  This causes the serial port to
  85. generate an interrupt.  The interrupt is serviced by a routine that:
  86.  
  87.         1. Gets the scan code sent by the keyboard
  88.         2. Determines wether it is dealing with
  89.            regular keys, shift keys or the mouse
  90.         3. Performs the appropriate function.
  91.  
  92. As a result of a regular key press, the scancode and an ascii code  
  93. ( looked up in a set of tables ) are placed in a queue.  Shift codes
  94. ( right shift, left shift, control, caps lock, and alternate ) simply
  95. cause a change the contents of a flag byte.  The contents of this byte
  96. determine which of three tables is used for looking up the scan code
  97. and if control or ALT are used as modifiers.
  98.  
  99. An external keyboard must duplicate, as much as is possible, these
  100. regular key and shift functions and not disrupt the other ( mouse,
  101. clock, and joystick ) keyboard functions.  Since the builtin keyboard
  102. functions involve modification of data structures ( keyboard queue and
  103. shift byte ) in memory, the external keyboard software can simply
  104. modify the same data structures.  If the keyboard software was not
  105. interrupt driven with these intermediate data stuctures, it would be
  106. much more dificult to add an external keyboard.
  107.  
  108. The serial port, the keyboard port, and the midi port all use similar
  109. interfaces.  This makes it easy to write an interrupt handler for the
  110. serial or midi port that duplicate the  services provide by keyboard
  111. port interrupt handler.  Most of the needed subroutines are already in
  112. the ST's ROMs.  The code needed to add a keyboard is quite small, about
  113. 700 bytes. I'm sending uuencoded sources and binaries to
  114. comp.{sources|binaries}. atari.st.
  115.  
  116. Bugs/Differences from the ST keyboard:
  117.  
  118. Well this an 'alpha' release, so it probably has a few unintended
  119. 'features'!  On the other hand, it is a small, simple, and straight
  120. forward program.  I have been using the midi version for several weeks
  121. on a 1040 ST and a friend has been using the serial port version on a
  122. 520 ST for two weeks.  We haven't found any problems.
  123.  
  124. I did have trouble when I tried using the external keyboard to replace
  125. my mouse buttons.  I had to eliminate that 'feature' since it regularly
  126. crashed the ST! The serial version won't work with a screen blanker
  127. that monitors the keyboard/midi interrupt vector since it doesn't use
  128. that vector!  The midi version works with idle 1.2, but it must be run
  129. before idle is run.
  130.  
  131. I didn't put a lot of effort into handling the alt key because I very
  132. rarely use it.  On the LK201, the alt key says 'Compose Character' and,
  133. because of the way I handled it, it only affects the next key pressed. 
  134. The only program I use that has a problem with alt is Uniterm.
  135. Unfortunately I use Uniterm more than any other program ( thank you
  136. Simon Poole!  ).  Uniterm doesn't use the normal alt flag, so I just do
  137. the Uniterm alt stuff from my regular keyboard.
  138.  
  139. The LK201 keyboard is programmable, but I have not made any use of this
  140. feature.  The midi interface is only 'RS423 compatible' for input, so
  141. extra hardware would be required there.  The serial interface should be
  142. able to talk to the keyboard, but I had no luck in my limited attempts
  143. to do so.  Since I am comfortable with the keyboards default settings,
  144. I made my interface input only.
  145.  
  146. Now let's consider the keyboard remappings: There is only one shift
  147. code, so there is no way to set only one of two shift bits.  I don't
  148. have any programs that distinguish between the the two shift keys,
  149. but you may.  It can't be done with the DEC keyboard.  Another DEC
  150. limitation, DEC keyboards don't have a backspace key or an escape
  151. key in the main keypad.  I 'fixed' both these problems.
  152.  
  153. Delete is the key where backspace was and shift-delete acts as
  154. backspace.  This works well when I use the ST as a terminal and with
  155. emacs like editors.  Since some ST programs use backspace as delete
  156. left, I also put backspace and delete on the two extra keys in the
  157. middle of the pad above the cursor keys. 
  158.  
  159. DEC has this wierd < > key down between the z and the left shift, I
  160. moved ~` down there, and put esc up in the top left hand corner where
  161. ~` was.  Note that < and > are shift-, and shift-.  respectively.
  162. Actually DEC supports this change in their new 300 series of terminals.
  163. They will even sell you a couple of new keytops to make it look
  164. pretty. I just marked < and > on the ',' and '.' keycaps. 
  165.  
  166. A few other keys have moved around a bit, but that is about it.  There
  167. are 20 function keys, so I mapped the top ten to the shifted function
  168. key codes.  The keypad is identical, except for the notation on the top
  169. four keys ( Pf1 - Pf4 instead of ( ) / * ) and the kp+ key that says
  170. ',' . There really is very little difference, and I find no problem,
  171. other that feel, in switching between the two keyboards.  After typing
  172. on the DEC keyboard, the ST feels very bad!  Now, on to the hardware
  173. details.
  174.  
  175. Hardware:
  176.  
  177. The RJ11 ( standard modular telephone connector ) plug on the DEC
  178. keyboard has four wires.  They are color coded black, red, green, and
  179. yellow.  The red wire supplies power ( +12 V.  ) to the keyboard.  It
  180. should be connected to the positive side of the power supply.  The
  181. green wire is ground for both the power supply and the communications
  182. lines.  It must be connnected to the negative side of the power supply.
  183. The black wire is the RS-423 output from the keyboard.  The yellow wire
  184. is the RS-423 input to the keyboard.  This interface does not use the
  185. yellow wire.
  186.  
  187. For the serial port, I used an RJ11 to DB25 adapter that looks like an
  188. oversized DB25 shell. Our computer center uses them for all our
  189. terminals so that they can use RJ11 wall jacks.  I brought the power
  190. wires in through a small hole that I melted in the shell, and did all
  191. the wiring inside.  There were originally four wires connected to pins
  192. 2, 3, 7, and 20.  I cut all the wires and reconnected the ones for 3 (
  193. black wire from keyboard) and  7 ( green wire from keyboard and power
  194. supply negative lead ). Plug the keyboard into the RJ11 jack. 
  195.  
  196. Plug the DB25 into the serial port, power the keyboard, and run
  197. serialkb.prg.  Serialkb.prg installs itself as the serial interrupt
  198. driver the first time it is run.  It deinstalls itself when it is run
  199. again and restores the original serial port interrupt handler.  The
  200. small amount of memory used ( < 1KB ) will not be released until you
  201. reboot.  It will create a new version of itself every other time you
  202. run it.
  203.  
  204. The midi port (IN) connector is a five pin DIN male.  I actually used
  205. the end of a cable from a defuct IBM PC keyboard. Connect the black
  206. wire from the keyboard to pin 4 and the green wire to pin 5.  Watch out
  207. for the wierd ordering, it isn't 1 2 3 4 5!  The keyboard power
  208. connections are the same as for the serial port ( positive voltage to
  209. red wire, negative to green ).  Note that the midi interface is not
  210. RS-423 compatible, but that a RS-423 output should drive a midi input. 
  211. It works well on my system, but 'your mileage may vary'.  Now lets go
  212. through the hard part, changing the midi port's baud rate to 4800 baud.
  213.  
  214. Before starting this modification, reflect on the fact you will be
  215. violating any Atari warantee and that you could, with suitable
  216. carelessness or ignorance, trash your ST.  Don't try this, or any
  217. other hardware modification, unless you know what you are doing and
  218. are able to handle any damage you may cause.  I obviously can't help
  219. you if you damage your system.  I hereby disclaim any and all
  220. responsiblility for the correctness of the following instructions.
  221. You should assume that they are designed to destroy your system 8^)!
  222. These instructions are not a cookbook, they assume that you know
  223. what you are doing.  If you don't, find somebody who does and get
  224. them to help you!
  225.  
  226. The midi port uses an ACIA.  In its stock form the clock input to the
  227. ACIA is 500 KHz and the ACIA is programmed to divide that clock by 16
  228. giving a 31.25 K baud rate.  The keyboard ACIA uses the same clock, but
  229. it is programmed to divide it by 64, giving 7.185 K baud. To get 4800
  230. baud we need 16 or 64 times 4800 Hz at the midi ACIA clock input.  The
  231. system has 8, 4, 2, and .5 Mhz clock signal available.  
  232.  
  233. A note of credit here, most of this information and the ROM listings
  234. needed to complete this project came from 'Atari ST Internals',
  235. published by Abacus.  This is, by far, the most useful ST book I own. 
  236.  
  237. A little playing around with a calculator shows 4MHz, divided by 13,
  238. then divided by 64, gives 4807.7 Hz.  Good enough!  There is a 4 MHz
  239. clock input to the 68901 MFP chip which is located near the ACIAs.  Now
  240. all we need is a ciruit to divide that 4 Mhz clock by thirteen.
  241.  
  242. Dividing a TTL level clock signal by 13 is easy to do with a 4 bit
  243. binary TTL counter chip with a parallel load function.  After a little
  244. reading in my well worn 'TTL Cookbook' by Don Lancaster, and a few
  245. minutes spent sorting through the chips I had available, I came up with
  246. the following circuit:
  247.  
  248.                             ____________
  249.                     grnd --|1    7    16|-- + 5V.
  250.                          --|2    4    15|-- + 5V.
  251.                          --|3    L    14|----------- 4 Mhz. INPUT
  252.                     grnd --|4    S    13|------  ( pin 35, 68901 )
  253.                    + 5V. --|5    1    12|--   | <- connect 13 and 11
  254.                          --|6    9    11|------ 
  255. 307.6923 KHz OUTPUT -------|7    1    10|-- + 5V.
  256. (pin 3, top 6850)   grnd --|8   TOP    9|-- + 5V.
  257.                             ------------
  258.  
  259. I wired this circuit directly on the pins of the 74LS191 IC using
  260. wire-wrap wire.  I soldered it after checking to make sure that it
  261. did indeed divide by 13.  At first it didn't because I had wired pin
  262. 11 to pin 12, intead of to pin 13!  I always check and double check
  263. every step of my work.  Careful checking along the way is tedious,
  264. but it prevents much pain and suffering later.
  265.  
  266.  
  267. Now, for the work inside the ST.  Take it apart and remove the floppy
  268. drive ( this is for a 1040, I think the relevant chips are located in
  269. the same area on the 520, near the serial port connector, but I
  270. haven't made this modification to a 520.  Locate the MFP and the two
  271. ACIAs.  On my 1040, the upper ( nearest the back ) ACIA is used for
  272. the midi port.  There is a small trace connecting pins 3 and 4 ( the
  273. clock inputs ) of both ACIA chips.  Cut it somewhere between the two
  274. ACIAs.  Be careful to completely sever that trace and not to damage
  275. any other traces.
  276.  
  277. To mount the 74LS191, bend pins 1 and 16 up above the top of the chip
  278. and solder them to the leads of a bypass capacitor located above and
  279. between the ACIA and MFP chips.  This holds the chip in place ( upside
  280. down ) and provides power and ground connections.  It is easy to break
  281. the pins, so be gentle.  Then carefully connect the INPUT by soldering
  282. wire wrap wire directly to pin 35 of the MFP.  This pin is located
  283. immediately below the Vss ( ground ) pin.  The ground is easy to
  284. identify because it is a thick trace. Finally, connect the OUTPUT to
  285. pin 3 of the midi ACIA using wire wrap wire.
  286.  
  287. Check and double check the wiring and the mounting of the TTL IC. Make
  288. sure that none of its leads can touch anything conductive, for example,
  289. the bottom shield on the disk drive!  Then put it all back together,
  290. and boot it.  Be prepared to go back inside and fix any errors!  
  291.  
  292. Connect the keyboard to the midi port, power the keyboard, run the
  293. program midikb.prg, and type on your new keyboard!  Midikb installs
  294. itself as the midi port interrupt handler.  It uses 1 K of memory.
  295. Since it does not interfere with the normal use of the system (as
  296. far as I have been able to determine 8*)), I always have it
  297. installed, but only power up the keyboard when I am using it.  To
  298. deinstall, you must reboot the system.
  299.   
  300.  
  301.     Mark Boyd, Computer Science
  302.     Univ. of North Carolina at Asheville
  303.     Asheville, NC 28804
  304.     mbunca@ecsvax.uncecs.edu
  305.     mark@ncsuvx.ncsu.edu
  306.  
  307.